LCD显示屏幕
从LCD屏幕的显示技术上来说,现在市场上有很多种使用不同的显示技术的屏幕,其中有些参数会影响驱动程序的设计。下面是在嵌入式产品上几种常用的显示屏。
TFT LCD
Thin Film Transistor 薄膜晶体管。每个液晶像素点都是由集成在像素点后面的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比度显示屏幕信息,是目前最好的LCD彩色显示设备之一,其效果接近CRT显示器,是现在笔记本电脑和台式机上的主流显示设备。TFT的每个像素点都是由集成在自身上的TFT来控制,是有源像素点。因此,不但速度可以极大提高,而且对比度和亮度也大大提高了,同时分辨率也达到了很高水平。
STN LCD
Super Twisted Nematic。过去使用的灰阶手机的屏幕都是STN 的。STN型液晶属于被动矩阵式LCD器件,它的好处是功耗小,具有省电的最大优势。现在STN 主要有CSTN 和DSTN 之分。CSTN即Color STN,一般采用传送式(transmissive)照明方式,传送式屏幕要使用外加光源照明,称为背光(backlight)。
总结:TFT(薄膜晶体管)、 STN (超扭曲向列荧幕)、CSTN ( STN 的加强版)、TFD(薄膜二极管)、UFB(Ultra Fine&Bright),OLED (Organic Light Emitting Display) 即有机发光显示器。综合表现力上:OLED>TFT>TFD=UFB>CSTN>STN
LCD Terminology
完整的LCD设备主要由控制器,驱动器,LCD显示屏三部分组成。在嵌入式设备中,控制器一般集成在SOC上,驱动器集成在LCD模块中。
在没有LCD控制器的SOC上,也可能用GPIO口模拟控制器。某些没有使用MCU的场合,或者有特殊要求的场合,可以使用FPGA来当作控制器;
驱动器
- LCD Single Chip Driver
- LCD Controller Driver
驱动器又叫做LCD控制芯片,LCD驱动芯片。LCD屏幕的显示,都需要专门的驱动芯片。例如:ILI9325
LCD模块
- LCD Module
- LCD Panel
都是指LCD模组,LCD模块。将LCD屏幕和LCD驱动芯片作成一个完整的模块,只需要LCD控制器这边匹配该LCD模组的接口,就可以使用。在做开发的时候,买到的LCD模块就是这个模组。
控制器
- MCU LCD Controller
- MCU Smart LCD Controller
都是指SOC上一个LCD控制的接口,其实就是SOC片上系统上的接口IC。在某些MCU上,可能既有普通的LCD Controller接口,还有Smart LCD Controller接口。君正的芯片使用上面两个名字,在三星芯片上使用FIMD(Fully Interactive Mobile Display ,完全交互式移动显示)控制器。
正如前面所说,在没有LCD控制器的MCU上(例如普通的8051单片机),也可能用GPIO口模拟控制器。在某些没有使用MCU的场合,或者有特殊要求的场合(例如在安防上将视屏推送到屏幕的实时性要求很高),可以使用FPGA来当作控制器;
LCD接口技术
上面说的LCD的驱动电路的发展,而接口都是一直是CPU接口。因为这个发展的方向是:LCD driver作为MCU的一片协处理芯片,接受MCU发过来的command/data,而可以相对独立的处理显示工作。而怎么处理显示工作的过程,对于MCU和程序员来说,都是透明的。
后来为什么出现了RGB的接口电路,小弟真的还不知道为什么。但是有两点很清楚:一是用RGB接口的MCU/Backend IC一般都更加的强大,有专门的接口电路来配合RGB显示。一是一般用RGB接口的LCD driver都没有GRAM,这大大的降低了LCD driver的成本,而将这些成本转移到更大的液晶显示区域去。所以不难看出,高端的显示屏(>=2.2",QCIFF)的一般都会选用RGB接口。想想吧,26w色的QCIFF的显示屏至少需要多少GRAM啊,这都是钱啊!
其实RGB接口的LCD也很简单了,甚至比CPU接口的LCD还要简单。和CPU接口的LCD driver相比,RGB接口的driver去掉了一个接口电路,就是去掉了CPU接口中的一个处理COMMAND/DATA数据的IO电路。(这个我光用语言说不大清楚,等小弟有空做一个ppt再放上来)这样的话,就需要MCU提供两个场同步信号(H,V),无疑提高了对MCU的要求,而且,LCD的帧率唯一受MCU/Backend IC的接口速度限制,所以如果MCU足够nb的话,LCD的刷新速度还是很不错的。还有就是有的GRB接口的driver做得还不是很nb,需要用SPI来传输一些少量的命令,而很多MCU没有这么一个专用的SPI,所以要用GPIO来模拟SPI。呵呵,看看也是够麻烦的。而且最郁闷的是,因为考虑到很多MCU/Backend IC芯片的接口速度还不是足够的快,所以很多厂家在LCD driver里还是放了部分或者是整个显示内存——唉,还是没有达到省钱的目的啊!
对于LCD控制器,其作用可以概括为通过配置提供的可编程寄存器产生必要的控制信号和传输数据信号将能显示在LCD上的数据从系统内部的数据缓冲区传送到外部的LCD驱动器中,最终在屏上显示。
通常LCD控制器和驱动器都可以支持多种连接方式,产生不同的信号来控制数据的传输。
- 1 MCU模式
目前最常用的连接模式,一般是8080系统和6800系统,现在6800系统已经不常用。数据位传输有8位、16位和18位。信号有CS、RS(register select)、RW、WR以及数据信号。这种方式控制起来简单方便,无需时钟和同步信号。速度慢,主要用于静态图像(still picture)的显示。
什么是8080系统和6800系统? 对于内存的存储的3个总线(数据总线,地址总线,控制总线)中的控制总线有区别: 8080是通过“读使能(RE)”和“写使能(WE)”两条控制线进行读写操作 6800是通过“总使能(E)”和“读写选择(W/R)”两条控制线进行读写操作
用MCU模式时由于数据可以先存到IC内部GRAM后再往屏上写,所以这种模式LCD可以直接接在MEMORY的总线上。
- 2 VSYNC模式
该模式在MCU模式下增加了一根VSYNC(帧同步)信号线,速度较MCU模式快,主要应用于运动画面的显示。
- 3 RGB模式
该模式一般为大屏所采用,数据位传输有8、16、18、24位。信号一般有VSYNC(帧同步)、HSYNC(行同步)、DOTCLK(像素时钟)、ENABLE(使能信号)以及数据信号。速度快,但需提供时钟和同步信号。
用RGB模式时就不同了,它没有内部RAM,HSYNC,VSYNC,ENABLE,CS,RESET,RS可以直接接在MEMORY的GPIO口上,用GPIO口来模拟波形,但有没有这么多空闲的GPIO口是个要考虑的问题,另外由于它不带RAM所以数据是直接往屏上写的,不能保存,所以要往屏上不断的写数据,不这样做屏就会变白。
所以通常接个外部RAM,把数据存在外部RAM里,再往屏上刷。或是干脆把屏接在带RAM的多媒体IC上。
只有TFT模块才有RGB接口。
- 4 SPI模式
信号有CS/,SLK,SDI,SDO四根线,相对简单,但是软件控制比较复杂。一般很少用。
除了上述接口模式外,不同的控制器也会支持一些特有的接口模式。另外,不同的控制器其提供的接口的名称可能不一样。下面以i.MX233为例,讲述LCD驱动原理。
i.MX233 LCD控制器
i.MX233 LCD控制器提供了四种接口模式:System Interface(MCU)、VSYNC Interface、DOTCLK Interface(RGB)、ITU-R BT.656 Digital Video Interface(DVI)。
对应上图,控制器提供了两种数据传输的方式。
一种方式是通过APB总线,CPU直接将数据或者命令传送到HW_LCDIF_DATA寄存器然后暂存在缓冲区中,最后通过数据信号线传送到LCD驱动器中。这种方式需要将数据按字、半字、或字节大小先传送到数据寄存器中,速度慢。在LCD提供的四种接口模式中,只有System Interface采用的是这种方式。
另一种方式是通过AXI总线,首先将要传送的数据存储在外部存储器(EMI)中,然后通过特定的寄存器保存数据在EMI中的首地址一次将数据传送到控制器的FIFO中。
Smart LCD控制器
Smart LCD一般自带buffer,外部没有了信号时,仍然能够自己进行刷新。普通LCD所有信号全部由外部驱动,一旦没有了信号,就完了。Smart LCD就是不需要主控这边给LCD panel送行、帧同步信号。
Smart LCD直接集成了LCD大部分驱动,点频时钟,行、帧同步信号,还有buffer信号转换,无信号时的刷屏。 比如外部输入R8 G8 B8,连续串行数据,会在Smart LCD驱动电路里面转换成R8G8B8的并行24bit信号,然后放在LCD的buffer中,进行显示。
LCD设备驱动的作用
要将LCD设备驱动起来,最终在液晶屏上能够显示图像,我们要做的工作就是确定LCD控制器和驱动器之间的连接方式,然后根据这种连接方式,配置对应的可编程寄存器,让用于图像显示的数据发送到LCD驱动器中。以i.MX233为例:
LCD模组为tm240320,采用的驱动器为ILI9325,支持MCU、SPI、RGB、VSYNC模式,下图为控制器与LCD模组之间的信号连接图:
除了16位数据信号外,提供了WR,RS,CS、RW、RESET信号,可以确定采用的是MCU模式,因此接下来按此模式要求配置相关的寄存器即可完成LCD设备的驱动了。对于具体配置的细节这里不赘述,有兴趣的可以看看芯片手册就可以了。
今天刚刚到北京第一天上班,也是第一次来这里灌水,没有很系统的总结LCD driver。只是抛砖引玉,等日后有空再好好总结一下和大家交流。